/**
 * 画铁轨
 * @param canvas
 * @param x1
 * @param y1
 * @param x2
 * @param y2
 * @param width
 * @param color
 * @returns {*}
 */
export function drawTrack (canvas, x1, y1, x2, y2, width = 15, color = '#3a3a3a') {
  // 计算矩形的尺寸和位置
  const left = Math.min(x1, x2);
  const top = Math.min(y1, y2);
  const rectWidth = Math.abs(x2 - x1);
  const rectHeight = width

  // 创建一个黑色边框的矩形
  let rect = new fabric.Rect({
    left: left,
    top: top,
    width: rectWidth,
    height: rectHeight,
    fill: 'white', // 内部填充颜色
    stroke: '#3a3a3a', // 边框颜色
    strokeWidth: 3, // 边框宽度
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'track'
  });

  // 将矩形添加到画布上
  canvas.add(rect);

  // 返回矩形对象以便进一步操作
  return rect;
}

/**
 * 画护柜
 * @param canvas
 * @param x1
 * @param y1
 * @param x2
 * @param y2
 * @param width
 * @param color
 * @returns {*}
 */
export function drawGuardRail (canvas, x1, y1, x2, y2, width = 15, color = '#3a3a3a') {
  // 计算矩形的尺寸和位置
  const left = Math.min(x1, x2);
  const top = Math.min(y1, y2);
  const rectWidth = Math.abs(x2 - x1);
  const rectHeight = width

  // 创建一个黑色边框的矩形
  let rect = new fabric.Rect({
    left: left,
    top: top,
    width: rectWidth,
    height: rectHeight,
    fill: 'white', // 内部填充颜色
    stroke: '#3a3a3a', // 边框颜色
    strokeWidth: 3, // 边框宽度
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'track'
  });

  // 将矩形添加到画布上
  canvas.add(rect);

  // 返回矩形对象以便进一步操作
  return rect;
}

/**
 * 轨旁箱盒
 * @param canvas
 * @param x1
 * @param y1
 * @param x2
 * @param y2
 * @param width
 * @param color
 * @param timeValue
 * @param sleeperData
 */
export function drawBoxUp (canvas, x1, y1, x2, y2, width = 30, color = '#3a3a3a', timeValue = 0,sleeperData) {
  // 计算矩形的尺寸和位置
  const left = Math.min(x1, x2);
  const top = Math.min(y1, y2);
  const rectWidth = width;
  const rectHeight = Math.abs(y2-y1);
  let rect = new fabric.Rect({
    left: left,
    top: top,
    width: rectWidth,
    height: rectHeight,
    fill: 'white', // 内部填充颜色
    stroke: '#3a3a3a', // 边框颜色
    strokeWidth: 3, // 边框宽度
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'track'
  });
  // 将矩形添加到画布上
  canvas.add(rect);
  // 将矩形发送到最底层
  rect.sendToBack();
  // 创建黑色圆点
  let circleUp4 = new fabric.Circle({
    radius: 10, // 圆点半径
    fill: 'white', // 内部填充颜色改为白色
    stroke: 'black', // 添加黑色边框
    strokeWidth: 2, // 边框宽度
    left: left+width/2+2, // 圆点中心相对于矩形的位置
    top: top+rectHeight+width/2+2, // 圆点中心相对于矩形的位置
    originX: 'center', // 圆心对齐方式
    originY: 'center',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'sleeperCircle'
  });
  // 将圆点添加到画布上
  canvas.add(circleUp4);
}


/**
 * 应答器
 * @param canvas
 * @param x1
 * @param y1
 * @param x2
 * @param y2
 * @param width
 * @param color
 * @param timeValue
 * @param sleeperData
 */
export function drawBoxMid (canvas, x1, y1, x2, y2, width = 30, color = '#3a3a3a', timeValue = 0,sleeperData) {
  // 计算矩形的尺寸和位置
  const left = Math.min(x1, x2);
  const top = Math.min(y1, y2);
  const rectWidth = width;
  const rectHeight = Math.abs(y2-y1);
  let rect = new fabric.Rect({
    left: left,
    top: top,
    width: rectWidth,
    height: rectHeight,
    fill: 'white', // 内部填充颜色
    stroke: '#3a3a3a', // 边框颜色
    strokeWidth: 3, // 边框宽度
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'track'
  });
  // 将矩形添加到画布上
  canvas.add(rect);
  // 将矩形发送到最底层
  rect.sendToBack();

  // 创建黑色圆点
  let circleUp1 = new fabric.Circle({
    radius: 5, // 圆点半径
    fill: 'black', // 圆点颜色
    left: left + rectWidth / 2 + 1, // 圆点中心相对于矩形的位置
    top: y1+20, // 圆点中心相对于矩形的位置
    originX: 'center', // 圆心对齐方式
    originY: 'center',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'sleeperCircle'
  });
  // 将圆点添加到画布上
  canvas.add(circleUp1);

  // 创建黑色圆点
  let circleUp2 = new fabric.Circle({
    radius: 5, // 圆点半径
    fill: 'black', // 圆点颜色
    left: left + rectWidth / 2 + 1, // 圆点中心相对于矩形的位置
    top: y2-20, // 圆点中心相对于矩形的位置
    originX: 'center', // 圆心对齐方式
    originY: 'center',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'sleeperCircle'
  });
  // 将圆点添加到画布上
  canvas.add(circleUp2);
}

/**
 * 画轨枕
 * @param canvas
 * @param x1
 * @param y1
 * @param x2
 * @param y2
 * @param width
 * @param color
 * @param timeValue
 * @param sleeperData
 */
export function drawTrackSleeper (canvas, x1, y1, x2, y2, width = 30, color = '#3a3a3a', timeValue = 0,sleeperData) {
  // 计算矩形的尺寸和位置
  const left = Math.min(x1, x2);
  const top = Math.min(y1, y2);
  const rectWidth = width;
  const rectHeight = Math.abs(y2-y1);
  let rect = new fabric.Rect({
    left: left,
    top: top,
    width: rectWidth,
    height: rectHeight,
    fill: 'white', // 内部填充颜色
    stroke: '#3a3a3a', // 边框颜色
    strokeWidth: 3, // 边框宽度
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'track'
  });
  // 将矩形添加到画布上
  canvas.add(rect);
  // 将矩形发送到最底层
  rect.sendToBack();

  // 创建黑色圆点
  let circleUp1 = new fabric.Circle({
    radius: 3, // 圆点半径
    fill: 'black', // 圆点颜色
    left: left + rectWidth / 2 + 1, // 圆点中心相对于矩形的位置
    top: y1+50, // 圆点中心相对于矩形的位置
    originX: 'center', // 圆心对齐方式
    originY: 'center',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'sleeperCircle'
  });
  // 将圆点添加到画布上
  canvas.add(circleUp1);

  // 创建黑色圆点
  let circleUp2 = new fabric.Circle({
    radius: 3, // 圆点半径
    fill: 'black', // 圆点颜色
    left: left + rectWidth / 2 + 1, // 圆点中心相对于矩形的位置
    top: y1+90, // 圆点中心相对于矩形的位置
    originX: 'center', // 圆心对齐方式
    originY: 'center',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'sleeperCircle'
  });
  // 将圆点添加到画布上
  canvas.add(circleUp2);

  // 创建黑色圆点
  let circleDown1 = new fabric.Circle({
    radius: 3, // 圆点半径
    fill: 'black', // 圆点颜色
    left: left + rectWidth / 2 + 1, // 圆点中心相对于矩形的位置
    top: y1+250, // 圆点中心相对于矩形的位置
    originX: 'center', // 圆心对齐方式
    originY: 'center',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'sleeperCircle'
  });
  // 将圆点添加到画布上
  canvas.add(circleDown1);

  // 创建黑色圆点
  let circleDown2 = new fabric.Circle({
    radius: 3, // 圆点半径
    fill: 'black', // 圆点颜色
    left: left + rectWidth / 2 + 1, // 圆点中心相对于矩形的位置
    top: y1+290, // 圆点中心相对于矩形的位置
    originX: 'center', // 圆心对齐方式
    originY: 'center',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'sleeperCircle'
  });
  // 将圆点添加到画布上
  canvas.add(circleDown2);


  // 添加文本
  let text = new fabric.Text('' + sleeperData.sleeperNo, {
    left: x1 + width/2,
    top: y2+20 ,
    fontSize: 12,
    originX: 'center', // 文本居中对齐到指定点
    originY: 'center',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'sleeperText'
  })
  canvas.add(text)
}

/**
 * 信号灯
 * @param canvas
 * @param x1
 * @param y1
 * @param x2
 * @param y2
 * @param width
 * @param color
 * @param timeValue
 * @param sleeperData
 */
export function drawSignal (canvas, x1, y1, x2, y2, width = 30, color = '#3a3a3a', timeValue = 0,sleeperData) {
  // 计算矩形的尺寸和位置
  const left = Math.min(x1, x2);
  const top = Math.min(y1, y2);
  const rectWidth = width;
  const rectHeight = Math.abs(y2-y1);
  let rect = new fabric.Rect({
    left: left,
    top: top,
    width: rectWidth,
    height: rectHeight,
    fill: 'white', // 内部填充颜色
    stroke: '#3a3a3a', // 边框颜色
    strokeWidth: 3, // 边框宽度
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'track'
  });
  // 将矩形添加到画布上
  canvas.add(rect);
  // 将矩形发送到最底层
  rect.sendToBack();

  // 创建黑色圆点
  let circleUp1 = new fabric.Circle({
    radius: 8, // 圆点半径
    fill: 'red', // 圆点颜色
    left: left + rectWidth / 2 + 1, // 圆点中心相对于矩形的位置
    top: y1+20, // 圆点中心相对于矩形的位置
    originX: 'center', // 圆心对齐方式
    originY: 'center',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'sleeperCircle'
  });
  // 将圆点添加到画布上
  canvas.add(circleUp1);

  // 创建黑色圆点
  let circleUp2 = new fabric.Circle({
    radius: 8, // 圆点半径
    fill: '#eebb44', // 圆点颜色
    left: left + rectWidth / 2 + 1, // 圆点中心相对于矩形的位置
    top: y1+40, // 圆点中心相对于矩形的位置
    originX: 'center', // 圆心对齐方式
    originY: 'center',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'sleeperCircle'
  });
  // 将圆点添加到画布上
  canvas.add(circleUp2);
  // 创建黑色圆点
  let circleDown2 = new fabric.Circle({
    radius: 8, // 圆点半径
    fill: 'blue', // 圆点颜色
    left: left + rectWidth / 2 + 1, // 圆点中心相对于矩形的位置
    top: y1+60, // 圆点中心相对于矩形的位置
    originX: 'center', // 圆心对齐方式
    originY: 'center',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'sleeperCircle'
  });
  // 将圆点添加到画布上
  canvas.add(circleDown2);
}

export function drawSignal2(canvas, x1, y1, x2, y2, width = 30, color = '#3a3a3a', timeValue = 0, sleeperData) {
  // 计算椭圆的尺寸和位置
  const centerX = (x1 + x2) / 2;
  const centerY = (y1 + y2) / 2;
  const rx = 3; // 增加水平半径，使椭圆更扁平
  const ry = 3; // 椭圆的半径（垂直方向）

  let ellipse = new fabric.Ellipse({
    left: centerX - rx,
    top: centerY - ry,
    rx: rx,
    ry: ry,
    fill: 'white', // 内部填充颜色
    stroke: '#3a3a3a', // 边框颜色
    strokeWidth: 3, // 边框宽度
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'track'
  });

  // 将椭圆添加到画布上
  canvas.add(ellipse);
  // 将椭圆发送到最底层
  ellipse.sendToBack();

  // 创建红色圆点
  let circleUp1 = new fabric.Circle({
    radius: 5, // 圆点半径
    fill: 'red', // 圆点颜色
    left: centerX, // 圆点中心相对于椭圆的位置
    top: 460, // 圆点中心相对于椭圆的位置
    originX: 'center', // 圆心对齐方式
    originY: 'center',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'sleeperCircle'
  });
  // 将圆点添加到画布上
  canvas.add(circleUp1);

  // 创建黄色圆点
  let circleUp2 = new fabric.Circle({
    radius: 5, // 圆点半径
    fill: 'yellow', // 圆点颜色
    left: centerX, // 圆点中心相对于椭圆的位置
    top: 480, // 圆点中心相对于椭圆的位置
    originX: 'center', // 圆心对齐方式
    originY: 'center',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'sleeperCircle'
  });
  // 将圆点添加到画布上
  canvas.add(circleUp2);

  // 创建蓝色圆点
  let circleDown2 = new fabric.Circle({
    radius: 5, // 圆点半径
    fill: 'blue', // 圆点颜色
    left: centerX, // 圆点中心相对于椭圆的位置
    top: 500, // 圆点中心相对于椭圆的位置
    originX: 'center', // 圆心对齐方式
    originY: 'center',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'sleeperCircle'
  });
  // 将圆点添加到画布上
  canvas.add(circleDown2);
}

/**
 * 尖轨尖
 * @param canvas
 * @param x1
 * @param y1
 * @param x2
 * @param y2
 * @param width
 * @param color
 * @param timeValue
 */
export function drawTrackPointRight (canvas, x1, y1, x2, y2, width = 15, color = '#909090', timeValue = 0) {
  // 计算矩形的尺寸和位置
  const left = Math.min(x1, x2);
  const top = Math.min(y1, y2);
  const rectWidth = width;
  const rectHeight = Math.abs(y2-y1);
  let sleeper = new fabric.Rect({
    left: left,
    top: top,
    width: rectWidth,
    height: rectHeight,
    fill: 'white', // 内部填充颜色
    stroke: '#3a3a3a', // 边框颜色
    strokeWidth: 3, // 边框宽度
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'track'
  });
  // 将矩形添加到画布上
  canvas.add(sleeper);


  let line1 = new fabric.Rect({
    left: x1,
    top: 145,
    width: 40,
    height: rectWidth,
    fill: 'white', // 内部填充颜色
    stroke: '#3a3a3a', // 边框颜色
    strokeWidth: 3, // 边框宽度
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'track'
  });

  let line2 = new fabric.Rect({
    left: x1,
    top: 300,
    width: 40,
    height: rectWidth,
    fill: 'white', // 内部填充颜色
    stroke: '#3a3a3a', // 边框颜色
    strokeWidth: 3, // 边框宽度
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'track'
  });

  // 添加文本
  let text = new fabric.Text('尖轨尖', {
    left: x1 + width/2,
    top: 35 ,
    fontSize: 10,
    originX: 'center', // 文本居中对齐到指定点
    originY: 'center',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'sleeperText'
  })
  canvas.add(line1)
  canvas.add(line2)
  canvas.add(text)
  canvas.add(sleeper)
}



/**
 * 尖轨尖
 * @param canvas
 * @param x1
 * @param y1
 * @param x2
 * @param y2
 * @param width
 * @param color
 * @param timeValue
 */
export function drawTrackPointLeft (canvas, x1, y1, x2, y2, width = 15, color = '#909090', timeValue = 0) {
  // 计算矩形的尺寸和位置
  const left = Math.min(x1, x2);
  const top = Math.min(y1, y2);
  const rectWidth = width;
  const rectHeight = Math.abs(y2-y1);
  let sleeper = new fabric.Rect({
    left: left,
    top: top,
    width: rectWidth,
    height: rectHeight,
    fill: 'white', // 内部填充颜色
    stroke: '#3a3a3a', // 边框颜色
    strokeWidth: 3, // 边框宽度
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'track'
  });
  // 将矩形添加到画布上
  canvas.add(sleeper);

  let line1 = new fabric.Rect({
    left: x1-25,
    top: 145,
    width: 25,
    height: rectWidth,
    fill: 'white', // 内部填充颜色
    stroke: '#3a3a3a', // 边框颜色
    strokeWidth: 3, // 边框宽度
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'track'
  });

  let line2 = new fabric.Rect({
    left: x1-25,
    top: y1-30,
    width: 25,
    height: rectWidth,
    fill: 'white', // 内部填充颜色
    stroke: '#3a3a3a', // 边框颜色
    strokeWidth: 3, // 边框宽度
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'track'
  });


  // 添加文本
  let text = new fabric.Text('尖轨尖', {
    left: x1 + width/2,
    top: 35 ,
    fontSize: 10,
    originX: 'center', // 文本居中对齐到指定点
    originY: 'center',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'sleeperText'
  })
  canvas.add(line1)
  canvas.add(line2)
  canvas.add(text)
  canvas.add(sleeper)
}

export function drawTrackCrossingLeftUp(canvas, x1,x2) {
  // 创建 Path2D 对象
  // ' -44 A 4500 xxxx为角度 0 0 0 '
  const pathData1 = 'M ' + x1 + ' -202 A 6500 2000 0 0 0 ' + x2 + ' 136'
  const arcPath1 = new fabric.Path(pathData1, {
    fill: 'transparent', // 设置填充颜色为透明
    stroke: '#3A3A3A', // 设置描边颜色
    strokeWidth: 3, // 设置描边宽度
    class: 'sleeperText',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true
  });
  canvas.add(arcPath1);

  const pathData2 = 'M ' + x1 + ' -218 A 6500 2000 0 0 0 ' + x2 + ' 120'
  const arcPath2 = new fabric.Path(pathData2, {
    fill: 'transparent', // 设置填充颜色为透明
    stroke: '#3A3A3A', // 设置描边颜色
    strokeWidth: 3, // 设置描边宽度
    class: 'sleeperText',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true
  });
  canvas.add(arcPath2);

  // 创建 Path2D 对象
  const pathData3 = 'M ' + x1 + ' -2 A 6500 2000 0 0 0 ' + x2 + ' 336'
  const arcPath3 = new fabric.Path(pathData3, {
    fill: 'transparent', // 设置填充颜色为透明
    stroke: '#3A3A3A', // 设置描边颜色
    strokeWidth: 3, // 设置描边宽度
    class: 'trackCrossing',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true
  });
  canvas.add(arcPath3);

  // 创建 Path2D 对象
  const pathData4 = 'M ' + x1 + ' -18 A 6500 2000 0 0 0 ' + x2 + ' 320'
  const arcPath4 = new fabric.Path(pathData4, {
    fill: 'transparent', // 设置填充颜色为透明
    stroke: '#3A3A3A', // 设置描边颜色
    strokeWidth: 3, // 设置描边宽度
    class: 'trackCrossing',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true
  });
  canvas.add(arcPath4);
}

export function drawTrackCrossingRightUp(canvas, x1,x2) {
  // 创建 Path2D 对象
  const pathData1 = 'M ' + x1 + ' 236 A 6500 2000 0 0 0 ' + x2 + ' -117'
  const arcPath1 = new fabric.Path(pathData1, {
    fill: 'transparent', // 设置填充颜色为透明
    stroke: '#3A3A3A', // 设置描边颜色
    strokeWidth: 3, // 设置描边宽度
    class: 'sleeperText',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true
  });
  canvas.add(arcPath1);
  // 创建 Path2D 对象
  const pathData2 = 'M ' + x1 + ' 220 A 6500 2000 0 0 0 ' + x2 + ' -132'
  const arcPath2 = new fabric.Path(pathData2, {
    fill: 'transparent', // 设置填充颜色为透明
    stroke: '#3A3A3A', // 设置描边颜色
    strokeWidth: 3, // 设置描边宽度
    class: 'sleeperText',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true
  });
  canvas.add(arcPath2);

  // 创建 Path2D 对象
  const pathData3 = 'M ' + x1 + ' 436 A 6500 2000 0 0 0 ' + x2 + ' 98'
  const arcPath3 = new fabric.Path(pathData3, {
    fill: 'transparent', // 设置填充颜色为透明
    stroke: '#3A3A3A', // 设置描边颜色
    strokeWidth: 3, // 设置描边宽度
    class: 'trackCrossing',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true
  });
  canvas.add(arcPath3);

  // 创建 Path2D 对象
  const pathData4 = 'M ' + x1 + ' 420 A 6500 2000 0 0 0 ' + x2 + ' 82'
  const arcPath4 = new fabric.Path(pathData4, {
    fill: 'transparent', // 设置填充颜色为透明
    stroke: '#3A3A3A', // 设置描边颜色
    strokeWidth: 3, // 设置描边宽度
    class: 'trackCrossing',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true
  });
  canvas.add(arcPath4);
}

export function drawTrackCrossingRightDown(canvas, x1,x2) {
  // 创建 Path2D 对象
  const pathData1 = 'M ' + x1 + ' ' +  '236 A 6500 2000 0 0 1 ' +  x2 + ' 574'
  const arcPath1 = new fabric.Path(pathData1, {
    fill: 'transparent', // 设置填充颜色为透明
    stroke: '#3A3A3A', // 设置描边颜色
    strokeWidth: 3, // 设置描边宽度
    class: 'sleeperText',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true
  });
  canvas.add(arcPath1);

  const pathData2 = 'M ' + x1 + ' ' +  '220 A 6500 2000 0 0 1 ' +  x2 + ' 558'
  const arcPath2 = new fabric.Path(pathData2, {
    fill: 'transparent', // 设置填充颜色为透明
    stroke: '#3A3A3A', // 设置描边颜色
    strokeWidth: 3, // 设置描边宽度
    class: 'sleeperText',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true
  });
  canvas.add(arcPath2);
  // 创建 Path2D 对象
  const pathData3 = 'M ' + x1 + ' ' +  '436 A 6500 2000 0 0 1 ' +  x2 + ' 774'
  const arcPath3 = new fabric.Path(pathData3, {
    fill: 'transparent', // 设置填充颜色为透明
    stroke: '#3A3A3A', // 设置描边颜色
    strokeWidth: 3, // 设置描边宽度
    class: 'trackCrossing',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true
  });
  canvas.add(arcPath3);

  const pathData4 = 'M ' + x1 + ' ' +  '420 A 6500 2000 0 0 1 ' +  x2 + ' 758'
  const arcPath4 = new fabric.Path(pathData4, {
    fill: 'transparent', // 设置填充颜色为透明
    stroke: '#3A3A3A', // 设置描边颜色
    strokeWidth: 3, // 设置描边宽度
    class: 'trackCrossing',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true
  });
  canvas.add(arcPath4);

}


export function drawTrackCrossingLeftDown(canvas, x1,x2) {
  // 创建 Path2D 对象
  const pathData1 = 'M ' + x1 + ' 574 A 6500 2000 0 0 1 ' + x2 + ' 236'
  const arcPath1 = new fabric.Path(pathData1, {
    fill: 'transparent', // 设置填充颜色为透明
    stroke: '#3A3A3A', // 设置描边颜色
    strokeWidth: 3, // 设置描边宽度
    class: 'sleeperText',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true
  });
  canvas.add(arcPath1);

  const pathData2 = 'M ' + x1 + ' 558 A 6500 2000 0 0 1 ' + x2 + ' 220'
  const arcPath2 = new fabric.Path(pathData2, {
    fill: 'transparent', // 设置填充颜色为透明
    stroke: '#3A3A3A', // 设置描边颜色
    strokeWidth: 3, // 设置描边宽度
    class: 'sleeperText',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true
  });
  canvas.add(arcPath2);

  // 创建 Path2D 对象
  const pathData3 = 'M ' + x1 + ' 774 A 6500 2000 0 0 1 ' + x2 + ' 436'
  const arcPath3 = new fabric.Path(pathData3, {
    fill: 'transparent', // 设置填充颜色为透明
    stroke: '#3A3A3A', // 设置描边颜色
    strokeWidth: 3, // 设置描边宽度
    class: 'trackCrossing',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true
  });
  canvas.add(arcPath3);

  const pathData4 = 'M ' + x1 + ' 752 A 6500 2000 0 0 1 ' + x2 + ' 420'
  const arcPath4 = new fabric.Path(pathData4, {
    fill: 'transparent', // 设置填充颜色为透明
    stroke: '#3A3A3A', // 设置描边颜色
    strokeWidth: 3, // 设置描边宽度
    class: 'trackCrossing',
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true
  });
  canvas.add(arcPath4);
}


export function drawPillar(canvas, x1,y1,width=30) {
  // 计算矩形的尺寸和位置
  const left = x1;
  const top = y1
  const rectWidth = width;
  const rectHeight = 90;
  let rect = new fabric.Rect({
    left: left,
    top: top,
    width: rectWidth,
    height: rectHeight,
    fill: 'white', // 内部填充颜色
    stroke: '#3a3a3a', // 边框颜色
    strokeWidth: 1, // 边框宽度
    selection: false,
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    class: 'track'
  });
  // 将矩形添加到画布上
  canvas.add(rect);
  // 将矩形发送到最底层
  rect.sendToBack();



// 定义三角形三个顶点的位置
  let points = [
    { x: 0, y: 0 }, // 第一个顶点位于原点
    { x: 30, y: 0 }, // 第二个顶点位于 (width, 0)
    { x: 0, y: 30 } // 第三个顶点位于 (0, height)
  ];

// 创建直角三角形
  let triangle = new fabric.Polygon(points, {
    fill: 'white', // 内部填充颜色
    stroke: 'black', // 边框颜色
    strokeWidth: 1, // 边框宽度
    left: x1+21, // 三角形相对于画布的位置
    top: y1+75, // 三角形相对于画布的位置
    selectable: false, // 禁止选择和拖动
    lockMovementX: true,
    lockMovementY: true,
    originX: 'center', // 中心对齐方式
    originY: 'center',
  });

// 将直角三角形添加到画布上
  canvas.add(triangle);
}
